// https://leetcode.cn/problems/maximum-length-of-subarray-with-positive-product/

// 题干：给你一个整数数组 nums ，请你求出乘积为正数的最长子数组的长度。
//      一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。
//      请你返回乘积为正数的最长子数组长度

// 示例：输入：nums = [1,-2,-3,4]
//      输出：4

// 碎语：

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int getMaxLen(vector<int>& nums)
    {
        int n = nums.size(), ret = 0;
        vector<int> f(n + 1), g(n + 1);

        for (int i = 1 ; i <= n ; i++){
            if (nums[i - 1] == 0) f[0] = g[0] = 0;

            else if(nums[i - 1] > 0){
                f[i] = f[i - 1] + 1;
                g[i] = (g[i - 1] > 0) ? g[i - 1] + 1 : 0;
            }

            else {
                g[i] = f[i - 1] + 1;
                f[i] = (g[i - 1] > 0) ? g[i - 1] + 1 : 0;
            }
            ret = max(ret, f[i]);
        }

        return ret;
    }
};

int main()
{
    Solution sol;
    vector<int> nums = {1,-2,-3,4};

    cout << sol.getMaxLen(nums) << endl;

    return 0;
}